#include "Rattaupes.h"

t_liste** Rattaupes_init(int eNombreJoueur) {
	/* Initialise au début du jeu 4 rattaupes pour chaque équipe (liste) */
	int eNombreJoueurIncremente;
	t_liste** pRattaupe=(t_liste**) malloc(eNombreJoueur*sizeof(t_liste*));

	/* allocation mémoire pour le tableau :  */
	for(eNombreJoueurIncremente=0;eNombreJoueurIncremente<eNombreJoueur;eNombreJoueurIncremente++){
		pRattaupe[eNombreJoueurIncremente] = (t_liste*) malloc(50*sizeof(t_liste));
		init_liste(pRattaupe[eNombreJoueurIncremente]);
	}
	
	return pRattaupe;

}

void Rattaupes_placer(t_liste** pRattaupe, int eNombreJoueur, t_motte** pMotte){
	/* Place les rattaupes en carré, vérifie qu'il y a le nombre nécessaire de case pour insérer les rattaupes */
	int eRattaupes;
	int eRattaupesNb=4;
	int eRattaupesCompteur;
	int eNombreJoueurCompteur;
	int eNombreJoueurCompteurPlacer=1;
	t_rattaupes Rattaupe;
	
	assert(ecmax*elmax>4+elmax*2+ecmax*2);
	
		/* Remplissage des états des 4 rats-taupes, ajout dans la liste, initialisation de la position en dehors de la matrice: */
	for(eNombreJoueurCompteur=0;eNombreJoueurCompteur<eNombreJoueur;eNombreJoueurCompteur++){
		for(eRattaupes=0;eRattaupes<4;eRattaupes++){
			Rattaupe.ePosX=elmax+1;
			Rattaupe.ePosY=ecmax+1;
			/* eSante à 120 car décrémenté mais rattaupe vient de se nourrir donc il devient à 100% au début du tour */
			Rattaupe.eSante=120;
			Rattaupe.Age=Adulte;
			Rattaupe.eGestation=0;
			Rattaupe.eDelaiGrossesse=0;
			Rattaupe.Race=Novice;
			ajout_droit(pRattaupe[eNombreJoueurCompteur],Rattaupe);		
		}
	}
	
	if(eNombreJoueur==2){
		for(eNombreJoueurCompteur=0;eNombreJoueurCompteur<eNombreJoueur;eNombreJoueurCompteur++){
					en_tete(pRattaupe[eNombreJoueurCompteur]);
					for(eRattaupesCompteur=0;eRattaupesCompteur<eRattaupesNb;eRattaupesCompteur++){
						if(eNombreJoueurCompteurPlacer==1){
							Rattaupe_equipe_placer(pRattaupe, pMotte, 2, 2, eRattaupesCompteur, eNombreJoueurCompteur);
						}
						if(eNombreJoueurCompteurPlacer==2){
							Rattaupe_equipe_placer(pRattaupe, pMotte, elmax-4, ecmax-4, eRattaupesCompteur, eNombreJoueurCompteur);
						}						
					}
					eNombreJoueurCompteurPlacer++;
				}
	}
	if(eNombreJoueur==3){	
		for(eNombreJoueurCompteur=0;eNombreJoueurCompteur<eNombreJoueur;eNombreJoueurCompteur++){
					en_tete(pRattaupe[eNombreJoueurCompteur]);
					for(eRattaupesCompteur=0;eRattaupesCompteur<eRattaupesNb;eRattaupesCompteur++){
						if(eNombreJoueurCompteurPlacer==1){
							Rattaupe_equipe_placer(pRattaupe, pMotte, 2, 2, eRattaupesCompteur, eNombreJoueurCompteur);
						}
						if(eNombreJoueurCompteurPlacer==2){
							Rattaupe_equipe_placer(pRattaupe, pMotte, elmax-4, ecmax-4, eRattaupesCompteur, eNombreJoueurCompteur);
						}	
						if(eNombreJoueurCompteurPlacer==3){
							Rattaupe_equipe_placer(pRattaupe, pMotte, 2, ecmax-4, eRattaupesCompteur, eNombreJoueurCompteur);
						}						
					}
					eNombreJoueurCompteurPlacer++;
				}
	}
	if(eNombreJoueur==4){
		for(eNombreJoueurCompteur=0;eNombreJoueurCompteur<eNombreJoueur;eNombreJoueurCompteur++){
					en_tete(pRattaupe[eNombreJoueurCompteur]);
					for(eRattaupesCompteur=0;eRattaupesCompteur<eRattaupesNb;eRattaupesCompteur++){
						if(eNombreJoueurCompteurPlacer==1){
							Rattaupe_equipe_placer(pRattaupe, pMotte, 2, 2, eRattaupesCompteur, eNombreJoueurCompteur);
						}
						if(eNombreJoueurCompteurPlacer==2){
							Rattaupe_equipe_placer(pRattaupe, pMotte, elmax-4, ecmax-4, eRattaupesCompteur, eNombreJoueurCompteur);
						}	
						if(eNombreJoueurCompteurPlacer==3){
							Rattaupe_equipe_placer(pRattaupe, pMotte, 2, ecmax-4, eRattaupesCompteur, eNombreJoueurCompteur);
						}	
						if(eNombreJoueurCompteurPlacer==4){
							Rattaupe_equipe_placer(pRattaupe, pMotte, elmax-4, 2, eRattaupesCompteur, eNombreJoueurCompteur);
						}						
					}
					eNombreJoueurCompteurPlacer++;
				}
	}


}

void Rattaupes_test_placer(t_liste* pRattaupe, t_motte** pMotte, int ePosX, int ePosY, int eRattaupesCompteur){
	/* Test si le rattaupe placé ne tombe pas sur un autre rattaupe ou un bord - Définit aussi le sexe */
	t_rattaupes Rattaupe;
	
	if(pMotte[ePosX][ePosY].eTaupes!=0||pMotte[ePosX][ePosY].eEtatterre==Pierre)
	printf("Pmotte taupe : %i eposx : %i eposy : %i, etat pierre : %i",pMotte[ePosX][ePosY].eTaupes,ePosX,ePosY,pMotte[ePosX][ePosY].eEtatterre);
	assert(pMotte[ePosX][ePosY].eTaupes==0||pMotte[ePosX][ePosY].eEtatterre!=Pierre);

	pMotte[ePosX][ePosY].eTaupes=1;
	pMotte[ePosX][ePosY].eEtatterre=Moyen;

	if(!hors_liste(pRattaupe)){
		valeur_elt(pRattaupe,&Rattaupe);
		Rattaupe.ePosX=ePosX;
		Rattaupe.ePosY=ePosY;
		if(eRattaupesCompteur%2==0) 
			Rattaupe.Sexe=Male;
		else
			Rattaupe.Sexe=Femelle;
		modif_elt(pRattaupe,Rattaupe);
		suivant(pRattaupe);
	}
}

void Rattaupe_equipe_placer (t_liste** pRattaupe, t_motte** pMotte, int ePosX, int ePosY, int eRattaupesCompteur, int eNombreJoueurCompteur){
	/* Dispache les positions des 4 rattaupes par équipe */
	switch (eRattaupesCompteur) {
		case 0 : Rattaupes_test_placer(pRattaupe[eNombreJoueurCompteur],pMotte,ePosX,ePosY,eRattaupesCompteur); break;
		case 1 : Rattaupes_test_placer(pRattaupe[eNombreJoueurCompteur],pMotte,ePosX+1,ePosY,eRattaupesCompteur); break;
		case 2 : Rattaupes_test_placer(pRattaupe[eNombreJoueurCompteur],pMotte,ePosX,ePosY+1,eRattaupesCompteur); break;
		case 3 : Rattaupes_test_placer(pRattaupe[eNombreJoueurCompteur],pMotte,ePosX+1,ePosY+1,eRattaupesCompteur); break;
	}
}


